const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// 解析JSON请求体
app.use(bodyParser.json());

// 配置跨域
app.use((req, res, next) => {
    // 允许所有来源访问
    res.setHeader('Access-Control-Allow-Origin', '*');
    // 允许的请求方法
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
    // 允许的请求头
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
    // 处理预检请求
    if (req.method === 'OPTIONS') {
        return res.sendStatus(200);
    }
    next();
});

// 存储任务UUID的简易内存存储
const taskStore = new Map();

// 生成UUID的工具函数
function generateUUID() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        const r = Math.random() * 16 | 0;
        const v = c === 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

// 程序启动接口
app.post('/ztzwai/task_start', (req, res) => {
    const { province, account, password, subject_nos, unit } = req.body;

    // 验证必填参数
    if (!province || !account || !password || !subject_nos || !Array.isArray(subject_nos)) {
        return res.json({
            code: 1,
            msg: '缺少必填参数或参数格式错误',
            data: {}
        });
    }

    // 生成任务UUID
    const task_uuid = generateUUID();
    // 存储任务信息（实际应用中可能需要存储更多信息）
    taskStore.set(task_uuid, {
        status: 'running',
        startTime: new Date()
    });

    // 返回成功响应
    res.json({
        code: 0,
        msg: '任务启动成功',
        data: { task_uuid }
    });
});

// 程序停止接口
app.post('/ztzwai/task_stop', (req, res) => {
    const { task_uuid } = req.body;

    // 验证必填参数
    if (!task_uuid) {
        return res.json({
            code: 1,
            msg: '缺少task_uuid参数',
            data: {}
        });
    }

    // 检查任务是否存在
    if (!taskStore.has(task_uuid)) {
        return res.json({
            code: 1,
            msg: '任务不存在',
            data: {}
        });
    }

    // 更新任务状态
    taskStore.set(task_uuid, {
        ...taskStore.get(task_uuid),
        status: 'stopped',
        stopTime: new Date()
    });

    // 返回成功响应
    res.json({
        code: 0,
        msg: '任务停止成功',
        data: {}
    });
});

// 自动化程序查看和互动地址
app.get('/ztzwai/automation', (req, res) => {
    res.send('自动化程序查看和互动页面（实际应用中应返回具体页面内容）');
});

// 启动服务器
const PORT = 8080;
app.listen(PORT, () => {
    console.log(`服务器运行在 http://localhost:${PORT}`);
    console.log(`自动化程序查看地址: http://localhost:7900`);
});

// 为了模拟7900端口的查看地址，这里启动另一个简单的服务器
const http = require('http');
const viewerServer = http.createServer((req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>自动化程序查看和互动界面</h1><p>当前任务列表:</p>' + 
            Array.from(taskStore.entries()).map(([uuid, info]) => 
                `<div>任务ID: ${uuid} - 状态: ${info.status}</div>`
            ).join(''));
});

viewerServer.listen(7900, () => {
    console.log('查看服务器运行在 http://localhost:7900');
});